import axios from 'axios'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from './token'

/* 响应体泛型参数 */
export interface Response<T> {
  code: number
  data: T
  message: string
  success: boolean
}

/* 创建axios实例 */
const instanceS = axios.create({
  /* 设置基础路径 */
  baseURL:'/sph-api',
  /* 设置响应超时时间 */
  timeout:5000
})

/* 创建axios实例 */
const instanceW = axios.create({
  /* 设置基础路径 */
  baseURL:'/wy-api',
  /* 设置响应超时时间 */
  timeout:15000
})

/* 请求拦截设置 */
instanceS.interceptors.request.use((config)=>{
  Nprogress.start()
  const token = getToken()
  // const token = 'beaed87141d8400095c3131ac35470be'
  if(token){
    config.headers.token = token
  }
  return config
})

/* 响应拦截设置  instanceS硅谷接口*/
instanceS.interceptors.response.use(
  (response)=>{
    const res = response.data
    if(res.code == 200 || res.code == 20000){
      Nprogress.done()
      return response.data
    }else{
      Nprogress.done()
      return response.data
    }
  },
  (error)=>{
    Nprogress.done()
    return Promise.reject(error)
  }
)


/* 请求拦截设置 * 网易/
instanceW.interceptors.request.use((config)=>{
  Nprogress.start()
  return config
})

/* 响应拦截设置 */
instanceW.interceptors.response.use(
  (response)=>{
    const res = response.data
    if(res.code == 200 || res.code == 20000){
      Nprogress.done()
      return response.data
    }else{
      Nprogress.done()
      return response.data
    }
  },
  (error)=>{
    Nprogress.done()
    return Promise.reject(error)
  }
)


export {instanceS,instanceW}









// /* 二次封装拦截器,定义泛型参数 */
// function http<T>(url:string,method:Method,paramsData?:any): Promise<Response<T>> {
//   /* 获取请求方式,转成全大写 */
//   let newMethod = method.toUpperCase()
//   /* 判断请求方式,如果为post,put,delete,那么请求参数就是data参数,赋值给data,如果不是,则赋值为空对象 */
//   let data = newMethod === 'POST' || newMethod === 'PUT' || newMethod === 'DELETE' ? paramsData : {}
//   /* 判断请求方式,如果为get,请求参数的data参数就是params参数,赋值给params,如果不是,则赋值一个空对象 */
//   let params = newMethod === 'GET' ? paramsData : {}

//   /* 返回axios实例的request函数,传递参数 */
//   return instance.request({
//     url,
//     method,
//     data,
//     params
//   })
// }

